package no.nordicsemi.android.nrfmesh.autobind;

import java.security.SecureRandom;
import java.util.Arrays;

/**
 * 保存自动配置时所需的默认参数，如默认 AppKey 和 Vendor Model ID。
 * 可用于替换绑定目标，保持灵活性。
 */
public class MeshAutoConfigParams {

    // 默认的 AppKey（16 字节）
    private byte[] defaultAppKey = new byte[]{
            (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78,
            (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF,
            (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78,
            (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF
    };

    // 默认 Vendor Model ID（自定义模型 ID）
    private int vendorModelId = 0x0000;

    // 公司 ID（Bluetooth SIG 分配）
    private int companyId = 0x02E5;

    // 默认配置单例（可选）
    private static final MeshAutoConfigParams DEFAULT = new MeshAutoConfigParams();

    public static MeshAutoConfigParams getDefault() {
        return DEFAULT;
    }

    public byte[] getDefaultAppKey() {
        return defaultAppKey;
    }

    public void setDefaultAppKey(byte[] defaultAppKey) {
        this.defaultAppKey = defaultAppKey;
    }

    public int getVendorModelId() {
        return vendorModelId;
    }

    public void setVendorModelId(int vendorModelId) {
        this.vendorModelId = vendorModelId;
    }

    public int getCompanyId() {
        return companyId;
    }

    public void setCompanyId(int companyId) {
        this.companyId = companyId;
    }

    public boolean isValidAppKey() {
        return defaultAppKey != null && defaultAppKey.length == 16;
    }

    /**
     * 检查 AppKey 是否已经生成
     */
    public boolean isAppKeyGenerated() {
        return defaultAppKey != null;
    }

    // /**
    //  * 生成新的随机 AppKey，更加安全
    //  */
    // public void generateRandomAppKey() {
    //     SecureRandom random = new SecureRandom();
    //     defaultAppKey = new byte[16];
    //     random.nextBytes(defaultAppKey);

    //     // 记录生成的 AppKey（仅用于调试）
    //     android.util.Log.d("MeshAutoConfigParams",
    //         "生成了新的随机 AppKey: " + getDefaultAppKeyHex());
    // }

     /**
      * 获取当前 AppKey 的十六进制字符串表示
      */
     public String getDefaultAppKeyHex() {
         if (defaultAppKey == null) return "";
         StringBuilder sb = new StringBuilder();
         for (byte b : defaultAppKey) {
             sb.append(String.format("%02X", b));
         }
         return sb.toString();
     }

    @Override
    public String toString() {
        return "MeshAutoConfigParams{" +
                "defaultAppKey=" + Arrays.toString(defaultAppKey) +
                ", vendorModelId=0x" + Integer.toHexString(vendorModelId) +
                ", companyId=0x" + Integer.toHexString(companyId) +
                '}';
    }
}
